﻿#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//int main()
//{
//	int a = 10;
//	a = a << 1;
//	//00000000000000000000000000001010// 整数无符号的原、反、补都一样
//	//00000000000000000000000000010100 //左移一位把左边第一位去掉，右边第一位补0， 结果是20
//	printf("%d ", a);
//	return 0;
//}

//int main()
//{
//
//	int a = -1;
//	int b = a << 1;
//	//100000000000000000000000000000001
//	//111111111111111111111111111111110
//	//111111111111111111111111111111111//左边去掉，右边补0；
//	//111111111111111111111111111111110
//	//100000000000000000000000000000001
//	//100000000000000000000000000000010//结果就是-2
//
//	printf("%d ", b);
//
//	return 0;
//}

//int main()
//{
//	int a = -10;
//	//100000000000000000000000000001010 原码
//	//111111111111111111111111111110101 反码
//	//111111111111111111111111111110110 补码
//	//111111111111111111111111111111011  算数右移 
//	//100000000000000000000000000000100 
//	//100000000000000000000000000000101 //算数右移的结果是-5
//	// 
//	// 
//	// 
//	//011111111111111111111111111111011  逻辑右移
//	//000000000000000000000000000000100
//	//000000000000000000000000000000101 逻辑右移结果 5
//
//	int b = a >> 1;
//	printf("%d ", a);
//	printf("%d ", b);
//	return 0;
//}
//int main()
//{
//	int a = -6;
//	//100000000000000000000000000000110 -6的原码
//	//111111111111111111111111111111001  反码
//	//111111111111111111111111111111010  补码
//
//	int b = 9;
//	//000000000000000000000000000001001
//	printf("%d ", a & b);// 按位与，是将a 和b的二进制补码相加，有0 则为零，两个同时为1就是1
//	//111111111111111111111111111111010
//	//000000000000000000000000000001001
//	//000000000000000000000000000001000 结果就是 8
//	printf("%d ", a | b);//按位或 是将a 和b的二进制补码相加，一个为1 则为1 ，相同为0 就是0
//	//111111111111111111111111111111010
//	//000000000000000000000000000001001
//	
//	//111111111111111111111111111111011  得出的按位或的补码，再将补码转回原码
//	//100000000000000000000000000000100
//	//100000000000000000000000000000101 结果就是-5
//	printf("%d ", a ^ b);//按位异或 相同为0， 不同为1；
//    //000000000000000000000000000001001
//	//111111111111111111111111111111010
//	//111111111111111111111111111110011补码
//	//100000000000000000000000000001100  反码
//	//100000000000000000000000000001101  原码 结果为-13
//
//	return 0;
//}

//int main()
//{
//	int a = 0;
//	printf("%d ", ~a);//按位取反
//   //00000000000000000000000000000000
//   //11111111111111111111111111111111补码
//   //10000000000000000000000000000000
//   //10000000000000000000000000000001 结果是 -1
//	return  0;
//}

//不能创建临时变量（第三个变量），实现两个整数的交换
//int main()
//{
//	int a = 10;
//	int b = 20; 
//	a = a ^ b;//把a^b的结果赋值给a
//	b = a ^ b;//这里a^b的a就是上面的a=a^b
//	a = a ^ b;//这里的b是上面b的赋值
//	printf("%d %d ", a, b);
//	return 0; 
//}
//int count_one(int n)
//{
//	int i = 0;
//	int count = 0;
//	for (i = 0; i < 32; i++)//-1的补码是32个1
//	{
//		if (((n >> i) & 1) == 1) 
//		{
//			count++;
//		}
//	}
//	return count;
// }
//int  main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int r = count_one(n);
//	printf("%d ", r);
//
//	return 0;
//}
//int count_one(int n)
//{
//	int count = 0;
//	while (n)
//	{
//		n = n & (n - 1);
//		count++;
//	}
//	return count;
// }
//int main()
//{
//	int n = 0; 
//	scanf("%d", &n);
//	int r = count_one(n);
//	printf("%d ", r);
//	return 0;
//}

//int  Add(int a, int b)
//{
//	return a + b;
// }
//
//int main()
//{
//	int a = 10;
//	int b = 20;
//	 int r =Add(a, b); //函数调⽤操作符
//	 printf("%d ", r);
//	return  0;
//}



struct Student
{	
	//成员变量
	char nume[20];
	int age;
	char sex[20];
} s3 ,s4;//这里也是全局变量

struct Student s2 = { "强哥", 35," 猛男" };//全局变量 
int main()
{	
	struct Student s1 = {"陈韵", 22," 女"};//局部变量
	printf("%s,%d,%s\n",s1.nume,s1.age,s1.sex);	
	printf("%s,%d,%s\n", s2.nume, s2.age, s2.sex);
	return 0;
}